#Boa:Frame:FRUsuario

import wx
import os
import psycopg2 #libreria para la conexion
import sys
import pprint
from reportlab.pdfgen import canvas #Libreria para reportes
from Tkinter import *
from tkMessageBox import *

def create(parent):
    return FRUsuario(parent)

[wxID_FRUSUARIO, wxID_FRUSUARIOBIMPRIMIRR, wxID_FRUSUARIOBSALIRR, 
 wxID_FRUSUARIOSTATICTEX1, wxID_FRUSUARIOTEXTT, 
] = [wx.NewId() for _init_ctrls in range(5)]

class FRUsuario(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRUSUARIO, name=u'FRUsuario',
              parent=prnt, pos=wx.Point(506, 167), size=wx.Size(300, 220),
              style=wx.DEFAULT_FRAME_STYLE, title=u'Reportes')
        self.SetClientSize(wx.Size(300, 220))
        self.SetBackgroundColour("White")
        self.Inserta_Foto("imagen/sistemas.jpg",(0,0))

        self.staticTex1 = wx.StaticText(id=wxID_FRUSUARIOSTATICTEX1,
              label=u'Ingrese Codigo', name=u'staticTex1', parent=self,
              pos=wx.Point(85, 24), size=wx.Size(142, 22), style=0)
        self.staticTex1.SetFont(wx.Font(13, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              u'Sans'))

        self.textT = wx.TextCtrl(id=wxID_FRUSUARIOTEXTT, name=u'textT',
              parent=self, pos=wx.Point(85, 90), size=wx.Size(140, 40), style=0,
              value=u'')
        self.textT.SetFont(wx.Font(13, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              u'Sans'))

        self.bimprimirr = wx.Button(id=wxID_FRUSUARIOBIMPRIMIRR,
              label=u'Imprimir', name=u'bimprimirr', parent=self,
              pos=wx.Point(190, 165), size=wx.Size(100, 40), style=0)
        self.bimprimirr.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              u'Sans'))
        self.bimprimirr.Bind(wx.EVT_BUTTON, self.OnBimprimirrButton,
              id=wxID_FRUSUARIOBIMPRIMIRR)

        self.bsalirr = wx.Button(id=wxID_FRUSUARIOBSALIRR, label=u'Salir',
              name=u'bsalirr', parent=self, pos=wx.Point(25, 165),
              size=wx.Size(100, 40), style=0)
        self.bsalirr.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              u'Sans'))
        self.bsalirr.Bind(wx.EVT_BUTTON, self.OnBsalirrButton,
              id=wxID_FRUSUARIOBSALIRR)

    def __init__(self, parent):
        self._init_ctrls(parent)

    def OnBimprimirrButton(self, event):
        codigo=self.textT.GetValue()
        self.Reporte('codigo',codigo)
        event.Skip()

    def OnBsalirrButton(self, event):
        self.Close(True)
        event.Skip()
        
    def Reporte(self,tipo, valor):
        conn_string = "host='localhost' dbname='DB778' user='postgres' password='123456789'"  
        conn = psycopg2.connect(conn_string)
        cursor = conn.cursor() 
        funcion=0
        if tipo == 'codigo':
            consultar_tabla="""Select B.fecha, B.entrada,B.salida,A.nombre
                            from catedratico A, horario B where A.codigo_catedratico=B.codigo_catedratico
                            and A.codigo_catedratico=%s
                            Group by B.fecha, B.entrada,B.salida,A.nombre
                            Order by B.fecha ASC""" % (valor)
            cursor.execute(consultar_tabla)
        elif tipo == 'fecha':
            consultar_tabla="""Select B.fecha, B.entrada,B.salida,A.nombre
                            from catedratico A, horario B where A.codigo_catedratico=B.codigo_catedratico 
                            and B.fecha::timestamp::date='%s'
                            group by B.fecha, B.entrada,B.salida,A.nombre
                            order by B.fecha ASC""" % (valor)
            cursor.execute(consultar_tabla)
        elif tipo == 'curso':
            consultar_tabla="""Select A.nombre, A.codigo_catedratico
                            from catedratico A, curso_catedratico B, curso C 
                            where A.codigo_catedratico=B.codigo_catedratico
                            and B.codigo_curso=C.codigo_curso
                            and C.codigo_curso=%s
                            Group by A.nombre, A.codigo_catedratico
                            Order by A.codigo_catedratico ASC""" % (valor)
            cursor.execute(consultar_tabla)
            resultados = cursor.fetchall()
            self.GenReportes2(resultados)
            funcion=1
        else:
            funcion=1
            
        if funcion==0:
            resultados = cursor.fetchall()
            self.GenReportes(resultados)
        cursor.close()
        conn.close()
        
    #Generar reporte por fecha y catedratico
    def GenReportes(self,resultados):#entra un arreglo como parametro
        aux =canvas.Canvas("Reportefc.pdf")#nombre del pdf
        aux.drawImage("/home/rpi/Desktop/Arqui.tar/Arqui/Arqui/sistemas.jpg",450,720,100,100)#se agrega el logo de la U
        aux.drawString(150,790,"Faculta de Ingenieria USAC");
        aux.drawString(150,780,"Escuela de Ciencias y Sistemas");
        aux.drawString(150,770,"Arquitectura de Computadores y Esambladores 1");
        aux.drawString(150,760,"Seccion: B");
        aux.drawString(150,750,"2do. Semestre 2014");
        
        aux.drawString(50,700,"   FECHA        ENTRADA         SALIDA         NOMBRE       ")#encabezado 
        aux.drawString(50,698,"___________________________________________________________")#separacion
        ejeX=680 #ejex=790 seria la parte mas alta de la pagina y ejex=50  la parte final
        for i in resultados: #foreach en el arreglo resultados
            if ejeX == 50:#ya esta llegando al final de la pagina por lo tanto ser crea una nueva hoja con aux.showPage()
                ejeX=790
                aux.showPage()
            cadena=str(i[0])+"     "+str(i[1])+"            "+str(i[2])+"         "+str(i[3]).replace("  ", "")
            #ubico el string en alguna parte del pdf eje> x,y,String
            aux.drawString(50,ejeX,cadena);
            ejeX=ejeX-10#un cambio de linea en el pdf
        aux.showPage()#llamo fin pagina
        aux.save()#guardo el pdf

    #Generar reporte por Curso
    def GenReportes2(self,resultados):#entra un arreglo como parametro
        aux =canvas.Canvas("Reportecurso.pdf")#nombre del pdf
        aux.drawImage("/home/rpi/Desktop/Arqui.tar/Arqui/Arqui/sistemas.jpg",450,720,100,100)#se agrega el logo de la U
        aux.drawString(150,790,"Faculta de Ingenieria USAC");
        aux.drawString(150,780,"Escuela de Ciencias y Sistemas");
        aux.drawString(150,770,"Arquitectura de Computadores y Esambladores 1");
        aux.drawString(150,760,"Seccion: B");
        aux.drawString(150,760,"2do. Semestre 2014");
        
        aux.drawString(50,700,"   CODIGO        NOMBRE")#encabezado 
        aux.drawString(50,698,"___________________________________________________________")#separacion
        ejeX=680 #ejex=790 seria la parte mas alta de la pagina y ejex=50  la parte final
        for i in resultados: #foreach en el arreglo resultados
            if ejeX == 50:#ya esta llegando al final de la pagina por lo tanto ser crea una nueva hoja con aux.showPage()
                ejeX=790
                aux.showPage()
            cadena=str(i[1])+"              "+str(i[0]).replace("  ", "")
            #ubico el string en alguna parte del pdf eje> x,y,String
            aux.drawString(80,ejeX,cadena);
            ejeX=ejeX-10#un cambio de linea en el pdf
        aux.showPage()#llamo fin pagina
        aux.save()#guardo el pdf

    #Mensaje de error            
    def error1(self):
        showerror("Error", "Ingrese la fecha en formato AAAA-MM-DD")
    def error2(self):
        showerror("Error", "No ingreso correctamente los campos")
        
    def Inserta_Foto(self, imagenName, pos):
        imagen = open(imagenName, 'rb')
        Img = wx.BitmapFromImage(wx.ImageFromStream(imagen))
        wx.StaticBitmap(self, -1, Img, pos)

    
